#!/usr/local/bin/python3
# -*- coding: utf-8 -*-

"""
@File    : app.py
@Author  : lepal
@Time    : 2024-02-28 11:40
"""
import sys

from flask import Flask

if sys.version_info >= (3, 8):  # 假设 Flask 3.x 需要 Python 3.8 或更高版本
    from app.libs.CustomJSONProvider import default_json_provider
else:  # 针对公司电脑 python 3.7.9
    from app.libs.CustomJSONEncoder import CustomJSONEncoder



# 注册蓝图
def register_blueprints(app):
    # from app.api.v1.user import user
    # from app.api.v1.book import book
    # app.register_blueprint(user)
    # app.register_blueprint(book)

    # 把蓝图注册到app核心对象上
    from app.api.v1 import create_blueprint_v1
    app.register_blueprint(create_blueprint_v1(), url_prefix='/v1')


#  注册插件 （在app/api/v1/client.py 中__register_user_by_email，里面用到了models/base.py，但是base.py用到了sqlalchemy，所以需要再这里注册一下sqlalchemy）
# models/base.py 中初始化了flask-sqlalchemy 的db对象，所以需要注册一下
def register_plugin(app):
    from app.models.base import db
    db.init_app(app)
    with app.app_context():  # create_all 方法需要再上下文环境中，所以使用with app.app_context()
        db.create_all()

def create_app():
    # 实例化flask
    app = Flask(__name__)

    # 根据 Flask 版本选择不同的导入方式
    if sys.version_info >= (3, 8):  # 假设 Flask 3.x 需要 Python 3.8 或更高版本
        # 设置自定义的 JSON 序列化函数
        app.json.default = default_json_provider
    else:
        # 自定义序列化类
        app.json_encoder = CustomJSONEncoder


    # 转载配置文件
    app.config.from_object('app.config.setting')
    app.config.from_object('app.config.secure')
    # app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+cymysql://root:123456@127.0.0.1:3306/imooc_ginger'

    # 调用蓝图注册方法
    register_blueprints(app)

    # 注册插件
    register_plugin(app)

    return app






